package main

import (
	"fmt"
	"time"
)

/*
	select 语句：
	select时go中的一个控制结构，select语句类似于switch语句，但是select会随机执行一个可运行的case。如果没有case可运行，它将阻塞，直到有case可运行。
	select语句的语法结构和switch语句很相似，也有case语句和default语句：
	select {
		case ...:
			...
		case ...:
			...
		default: (可选)
			...
	}
	说明：（就是给通道使用的）
		每个case都必须是一个通信；
		所有channel表达式都会被求值；
		所有被发送的表达式都会被求值；
		如果有多个case都可以运行，select会随机公平地选出一个执行，其它不会执行。
	否则：
		如果有default语句，则执行该语句
		如果没有default语句，select将会被阻塞，直到某个通信可以运行；go不会重新对channel进行求值
*/

func main() {
	ch1 := make(chan int)
	ch2 := make(chan int)

	go func() {
		time.Sleep(5)
		ch1 <- 2
	}()
	select {
	case num1 := <-ch1:
		fmt.Println(num1)
	case num2 := <-ch2:
		fmt.Println(num2)
	default:
		fmt.Println("exit")

	}
}
